package org.ehe.business.step.domain.VO;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.ehe.business.step.domain.StepAnalysis;
import org.ehe.business.supplier.domain.SupplierInfo;
import org.ehe.common.core.service.OssService;
import org.ehe.common.mybatis.core.domain.BaseEntity2;
import org.ehe.system.domain.vo.SysOssVo;

import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * STEP文件分析结果实体类
 * 对应数据库表t_step_analysis，存储STEP格式文件的分析结果信息
 *
 * @author zhangnn
 * @className StepAnalysis
 * @description STEP文件分析结果实体类
 * @date 2025-08-06 13:48:56
 */
@Data
@AutoMapper(target = StepAnalysis.class)
public class StepAnalysisVO {
    /**
     * 主键ID
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 文件名称
     */
    @TableField(value = "file_name")
    private String fileName;

    /**
     * 文件大小(字节)
     */
    @TableField(value = "file_size")
    private Long fileSize;

    /**
     * 分析时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(value = "analysis_time")
    private LocalDateTime analysisTime;

    /**
     * 文件描述
     */
    @TableField(value = "description")
    private String description;

    /**
     * 创建信息
     */
    @TableField(value = "creation_info")
    private String creationInfo;

    /**
     * 单位
     */
    @TableField(value = "unit")
    private String unit;

    /**
     * 复杂度
     */
    @TableField(value = "complexity")
    private String complexity;

    /**
     * 请求ID
     */
    @TableField(value = "request_id")
    private String requestId;

    /**
     * 处理时间(毫秒)
     */
    @TableField(value = "processing_time_ms")
    private Integer processingTimeMs;

    /**
     * 几何实体统计(JSON格式)
     */
    @TableField(value = "geometric_entities")
    private String geometricEntities;

    /**
     * 边界框尺寸 [长,宽,高](JSON格式)
     */
    @TableField(value = "bounding_box")
    private String boundingBox;

    /**
     * 尺寸描述
     */
    @TableField(value = "dimensions")
    private String dimensions;

    /**
     * 表面类型分布(JSON格式)
     */
    @TableField(value = "surface_types")
    private String surfaceTypes;

    /**
     * 表面复杂度评分
     */
    @TableField(value = "surface_complexity_score")
    private Integer surfaceComplexityScore;

    /**
     * 加工特征(JSON格式)
     */
    @TableField(value = "machining_features")
    private String machiningFeatures;

    /**
     * 特征详情(JSON格式)
     */
    @TableField(value = "feature_details")
    private String featureDetails;

    /**
     * 估算体积
     */
    @TableField(value = "estimated_volume")
    private BigDecimal estimatedVolume;

    /**
     * 体积单位
     */
    @TableField(value = "volume_unit")
    private String volumeUnit;

    /**
     * 表面积
     */
    @TableField(value = "surface_area")
    private BigDecimal surfaceArea;

    /**
     * 公差信息
     */
    @TableField(value = "tolerance_info")
    private String toleranceInfo;

    /**
     * 材料列表(JSON格式)
     */
    @TableField(value = "materials")
    private String materials;

    /**
     * 材料类型
     */
    @TableField(value = "material_type")
    private String materialType;

    /**
     * 材料属性(JSON格式)
     */
    @TableField(value = "material_properties")
    private String materialProperties;

    /**
     * 预估工期(天)
     */
    @TableField(value = "estimated_days")
    private Integer estimatedDays;

    /**
     * 加工时间(小时)
     */
    @TableField(value = "machining_hours")
    private Integer machiningHours;

    /**
     * 预估成本
     */
    @TableField(value = "estimated_cost")
    private BigDecimal estimatedCost;

    /**
     * 推荐工艺(JSON格式)
     */
    @TableField(value = "recommended_processes")
    private String recommendedProcesses;

    /**
     * 工艺时间分解(JSON格式)
     */
    @TableField(value = "process_time_breakdown")
    private String processTimeBreakdown;

    /**
     * 成本分解(JSON格式)
     */
    @TableField(value = "cost_breakdown")
    private String costBreakdown;

    /**
     * 估算材料体积
     */
    @TableField(value = "estimated_material_volume")
    private BigDecimal estimatedMaterialVolume;

    /**
     * 原材料体积
     */
    @TableField(value = "raw_material_volume")
    private BigDecimal rawMaterialVolume;

    /**
     * 材料利用率
     */
    @TableField(value = "material_utilization")
    private BigDecimal materialUtilization;

    /**
     * 难度等级
     */
    @TableField(value = "difficulty_level")
    private String difficultyLevel;

    /**
     * 难度评分
     */
    @TableField(value = "difficulty_score")
    private Integer difficultyScore;

    /**
     * 风险等级
     */
    @TableField(value = "risk_level")
    private String riskLevel;

    /**
     * 精度等级
     */
    @TableField(value = "precision_level")
    private String precisionLevel;

    /**
     * 特殊要求(JSON格式)
     */
    @TableField(value = "special_requirements")
    private String specialRequirements;

    /**
     * 所需设备(JSON格式)
     */
    @TableField(value = "required_equipment")
    private String requiredEquipment;

    /**
     * 最小机床尺寸
     */
    @TableField(value = "min_machine_size")
    private String minMachineSize;

    /**
     * 质量问题(JSON格式)
     */
    @TableField(value = "quality_issues")
    private String qualityIssues;

    /**
     * 改进建议(JSON格式)
     */
    @TableField(value = "recommendations")
    private String recommendations;

    /**
     * 质量评分
     */
    @TableField(value = "quality_score")
    private Integer qualityScore;

    /**
     * PDF报告路径
     */
    @TableField(value = "pdf_report_path")
    private String pdfReportPath;

    /**
     * 技术图纸路径
     */
    @TableField(value = "technical_drawing_path")
    private String technicalDrawingPath;

    /**
     * 模型预览图路径
     */
    @TableField(value = "model_preview_path")
    private String modelPreviewPath;

    /**
     * CAD软件
     */
    @TableField(value = "cad_software")
    private String cadSoftware;

    /**
     * STEP版本
     */
    @TableField(value = "step_version")
    private String stepVersion;

    /**
     * 元数据(JSON格式)
     */
    @TableField(value = "metadata")
    private String metadata;

    @TableField(value = "oss_id")
    private String ossId;

    /**
     * 上传的服务器信息
     */
    private SysOssVo ossVo;
}
